<?php

namespace Xin\Coze\Providers;

/**
 * @see https://www.coze.cn/open/playground/upload_file
 */
class FilesProvider extends AbstractProvider
{
	/**
	 * 上传文件
	 * <h2>限制</h2>
	 * <p>文件大小：该 API 允许上传的最大文件大小为 512 MB。然而，在与智能体对话时，实际可使用的文件大小取决于智能体的模型版本。</p>
	 * <p>有效期：上传的文件将保存在扣子服务端，有效期为 3 个月。</p>
	 * <p>使用限制：上传到扣子的文件仅限本账号查看或使用。</p>
	 * <h2>文件类型</h2>
	 * <p>文档：DOC、DOCX、XLS、XLSX、PPT、PPTX、PDF、Numbers、CSV</p>
	 * <p>文本文件：JS、CPP、PY、JAVA、C、TXT、CSS、JAVASCRIPT、HTML、JSON、MD</p>
	 * <p>图片：JPG、JPG2、PNG、GIF、WEBP、HEIC、HEIF、BMP、PCD、TIFF</p>
	 * <p>音频：WAV、OGG_OPUS</p>
	 * <p>视频：MP4、AVI、MOV、3GP、3GPP、FLV、WEBM、WMV、RMVB、M4V、MKV</p>
	 * <p>压缩文件：RAR、ZIP、7Z、GZ、GZIP、BZ2</p>
	 *
	 * @return array
	 */
	public function upload($file, array $options = [])
	{
		return $this->coze->client()->upload('/v1/files/upload', [
			'file' => $file,
		], [], [], $options)->throwUnlessHttpError()->data('data');
	}

	/**
	 * 查看文件详情
	 * @param string $fileId
	 * @param array $options
	 * @return array
	 */
	public function detail(string $fileId, array $options = [])
	{
		return $this->coze->client()->get('/v1/files/retrieve', [
			'file_id' => $fileId,
		], $options)->throwUnlessHttpError()->data('data');
	}
}
